/*继电器分高压电路和低压电路。低压电路为5V，高压电路为28V，最高可控制250V电路。
低压电路连接继电器内部的电磁铁，通电时带动衔铁接通高压电路。
试验用的继电器高压和低压电路都是3路。
低压电路为VCC、GND、INT。
高压电路为零线、常开、常闭。

低压电路VCC和GND接通后，INT给高电压则接通常闭，否则常闭是不通电的。

这个电路很多地方可以用。比如遥控灯，或者自制恒温加热器，自动灌溉等等。

我的这个试验加了个LCD，主要是为了显示继电器电路状态。所以代码多了许多。

2004和1602有个缺点，就字符会停留在屏幕上。比如屏幕显示1234，之后又显示123，如果不清屏屏幕上还是1234。所以代码中有大量的lcd.print("  ");就是输出空格。如果是界面切换可以使用lcd.clear()，但是如果做为仪表盘使用会非常晕，看不清显示的内容。

代码走你*/

#define Relay 2 //继电器针脚 
#define button 3 //开关针脚 
#define LED 13 //主板上L针脚 
String Lcd ; //初始一个变量 给后面up down用 
int button_NUM = 0 ; //初始化button_NUM 
#include < LiquidCrystal_I2C.h > //初始化I2C屏幕 
#include < Wire.h > 
LiquidCrystal_I2C
lcd ( 0x3F , 16 , 2 ) ; 
void setup ( ) { 
  // put your setup code here, to run once: 
  pinMode ( LED , OUTPUT ) ; //设置输出给LED 
  pinMode ( Relay , OUTPUT ) ; //设置输出给继电器 
  pinMode ( button , INPUT_PULLUP ) ; //设置开关上拉 
  //初始设置关闭LED和继电器 
  digitalWrite ( LED , LOW ) ; 
  digitalWrite ( Relay , LOW ) ; 
  lcd . init ( ) ; 
  lcd . backlight ( ) ; 
  lcd . setCursor ( 0 , 0 ) ; 
  lcd . print ( "NOW, The Relay" ) ; 
  lcd . setCursor ( 0 , 1 ) ; 
  lcd . print ( "is Close DOWN !" ) ; 
} 
void loop ( ) { 
  // put your main code here, to run repeatedly: 
    ScanKey ( ) ; 
            //按键扫描程序，当按键按下时候，该子程序会修改KEY_NUM的值 
  if ( button_NUM == 1 )              //是否按键按下 
  { 
    digitalWrite ( LED , ! digitalRead ( LED ) ) ; 
   //LED的状态翻转 
    digitalWrite ( Relay , ! digitalRead ( Relay ) ) ; //Relay状态翻转 
    if ( digitalRead ( LED ) == HIGH ) 
    { 
       Lcd = "UP !" ; 
    } 
    else 
  Lcd = "DOWN !" ; 
    lcd . setCursor ( 9 , 1 ) ; 
    lcd . print ( "      " ) ; //清除UP !或DOWN !
    lcd . setCursor ( 9 , 1 ) ; 
    lcd . print ( Lcd ) ; 
  } 
} 
void ScanKey ( ) 
            //按键扫描程序 
{ 
  button_NUM = 0 ; 
              //清空变量 
  if ( digitalRead ( button ) == LOW ) 
    //有按键按下 
  { 
    delay ( 20 ) ; 
            //延时去抖动 
    if ( digitalRead ( button ) == LOW ) 
  //有按键按下 
    { 
      button_NUM = 1 ; 
        //变量设置为1 
      while ( digitalRead ( button ) == LOW ) ; //等待按键松手 
    } 
  } 
} 
